/*
 * I2S音频接口头文件
 * 定义I2S音频输出相关的函数和数据结构
 */

#ifndef I2S_AUDIO_H
#define I2S_AUDIO_H

#include "esp_err.h"
#include "driver/i2s_std.h"

// I2S引脚定义
#define I2S_BCK_PIN     GPIO_NUM_38  // 位时钟引脚
#define I2S_WS_PIN      GPIO_NUM_39  // 字选择(左右时钟)引脚
#define I2S_DOUT_PIN    GPIO_NUM_14  // 数据输出引脚

// I2S音频配置参数
// 原值：#define I2S_SAMPLE_RATE     24000    // 采样率（与Qwen-Omni模型匹配）
#define I2S_SAMPLE_RATE     16000    // 降低采样率使语速变慢
#define I2S_BIT_WIDTH       16       // 位深
#define I2S_CHANNEL_NUM     2        // 声道数 (立体声)

/**
 * @brief 初始化I2S音频接口
 * @return ESP_OK 初始化成功
 *         其他错误码 初始化失败
 */
esp_err_t i2s_audio_init(void);

/**
 * @brief 销毁I2S音频接口
 * @return ESP_OK 销毁成功
 *         其他错误码 销毁失败
 */
esp_err_t i2s_audio_deinit(void);

/**
 * @brief 写入音频数据到I2S接口
 * @param data 音频数据缓冲区
 * @param data_len 音频数据长度（字节）
 * @param bytes_written 实际写入的字节数（输出参数）
 * @param timeout_ms 超时时间（毫秒）
 * @return ESP_OK 写入成功
 *         其他错误码 写入失败
 */
esp_err_t i2s_audio_write(const uint8_t *data, size_t data_len, size_t *bytes_written, uint32_t timeout_ms);

#endif /* I2S_AUDIO_H */